L22: GitHub

linux.edumach.cz



Git a GitHub není to samé!

GitHub.com je jeden z nejpoužívanějších serverů pro správu vzdálených repozitářů je. Používá jej 70 % všech vývojářů. Od roku 2018 patří Microsoftu. Kromě hostování repozitářů poskytuje uživatelům mnoho dalších služeb spojených s vývojem projektů: podporu pro dokumentaci a tvorbu Wiki, diskuse uživatelů, trackování problémů, historii verzování projektů, statistiky, propojení se sociálními sítěmi. Od prosince 2024 i bezplatný přístup k GitHub Copilotu.

GitHub není jediný. Další podobné servery jsou například GitLab.com, BitBucket.org, SourceForge.net apod.

Můžete si vytvořit i svůj vlastní server s úložištěm repozitářů GitLab server.

Možností, jak pracovat s GitHubem je víc:

Postupně si je ukážeme.

1. Stažení (klonování) cizího kódu do počítače

Otevřené projekty (public) lze z GitHubu (bez registrace a přihlášení):

  1. stahovat úplně stejně, jako běžné soubory (bez podpory gitu a commitů)
  2. použít git clone k vytvoření lokální kopie projektu včetně všech commitů.

💾 Přesuň se do adresáře, ve kterém bude adresář s klonovaným projektem. Samotný adresář nevytvářej, příkaz git clone si jej vytvoří sám.

cd
git clone https://github.com/w3schools-test/hello-world
cd hello-world
git status
git log --oneline

V domovském adresáři vznikne adresář hello-world s projektem.

2. 🔐 GitHub účet a klíče

Pro možnost vytvoření a správy vlastních repozitářů je třeba si na serveru vytvořit bezplatný účet.

⚠️ Důležité: Použij stejnou e-mailovou adresu jako máš v konfiguraci gitu.

$ git config user.email

Pro plnohodnotnou spolupráci mezi lokálním git repozitářem a GitHub serverem je navíc potřeba si vygenerovat šifrovací klíče na každém počítači, kde chceš GitHub používat.. Návod je na webu GitHubu.

3. Fork jiného public repozitáře do svého

Přejdi na stránku repozitáře, který chceš forknout (zkopírovat):

https://github.com/edumach/html-uvod

Klikni na tlačítko Fork (vpravo nahoře). GitHub vytvoří kopii repozitáře ve tvém vlastním účtu GitHubu.

Hotovo! Teď máš repozitář html-uvod ve svém GitHubu.

3.1. Jak pracovat s forknutým repozitářem?

Svůj GitHub repozitář můžeš buď upravovat přímo na GitHubu nebo jej synchronizovat do svého počítače (a upravovat ho tam):

$ git clone https://github.com/JMENO/html-uvod.git

Pak už jen běžné Git příkazy:

$ git add -A
$ git commit -m "Moje úpravy"
$ git push origin main

💡 Pro hlavní větev gitu existuje název master (nebo "nově" main). Podobně pro vzdálenou větev existuje název origin.

Kontrola, kam je připojený lokální repozitář:

$ git remote -v

4. Napojení lokálního gitu na GitHub

Vyžaduje SSH klíče

Obecný postup:

  1. Vytvoření lokálního git repozitáře (vytvoř s názvem seminarka)
  2. Založení prázdného GitHub repozitáře (ideálně se stejným jménem)
  3. Přidání vzdáleného pro obousměrnou synchronizaci

Na GitHubu:

  1. klikni na New repository a zadej název repozitáře (seminarka).
  2. Vytvoř úplně prázdný repozitář: neklikej na "Add README", "Add .gitignore" nebo "Choose a license".
  3. Dokonči kliknutím na Create repository.

V lokálním git repozitáři:

  1. Přidej svůj nový GitHub repozitář:
    $ git remote add origin git@github.com:JMENO/seminarka.git
    
  2. Dokonči commitem a nahráním:
    $ git add -A  
    $ git commit -m "Přidání repozitáře"  
    $ git push -u origin main
    

⚠️ Pamatuj, že hlavní větev v lokálním repozitáři se jmenuje master nebo nově main, zatímco stejná hlavní větev na GitHubu se jmenuje origin.

5. Práce se vzdálenými repozitáři

Git je distribuovaný verzovací systém. To znamená, že se v něm dá mimo práce v lokálním repozitáři pracovat také ve vzdálených repozitářích. To umožňuje nesmírně pružné možnosti spolupráce mezi mnoha týmy a vývojáři.

$ git remote -v
$ git remote remove origin 

6. Další práce se vzdálenými repozitáři

Pokud máme ke vzdálenému repozitáři příslušná práva, můžeme synchronizovat práci mezi ním a lokálním repozitářem oběma směry.

Typicky se pracuje po jednotlivých větvích (pokud jich máš víc):

$ git fetch <vzdálený> <větev> .. updatuje stav dané větve v lokálním repozitáři podle vzdáleného, neovlivňuje stav WD. Typicky git fetch origin main.

$ git pull <vzdálený> <větev> .. chová se velmi podobně jako git fetch, ale updatuje zároveň WD, tedy prakticky provede merge, což může vést ke konfliktům.

$ git push <vzdálený> <větev> .. updatuje danou větev ve vzdáleném repozitáři podle stavu v lokálním (na vzdálený repozitář musí být právo zápisu).

Git a jeho příkazový aparát otevírá široké možnosti spolupráce mnoha lidí v jednom projektu.

⚠️ Důležité: Aby nedocházelo ke zmatkům, je potřeba si zejména u větších projektů předem domluvit přesná pravidla, jak bude spolupráce probíhat: